package com.ftg.learn.bus.userole_control.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ftg.learn.bus.userole_control.mapper.userole_control_mapper;
import com.ftg.learn.bus.userole_control.pojo.userole_control;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
public class userole_control_service {
    @Autowired
    userole_control_mapper ycm;
    UUID uuid;

    /**
     * 根据用户名 查询该用户具有的角色信息
     * @param user_id
     * @return
     */
    public List<Map<String,Object>> queryRoleForUserByUsername(String user_id){
        return ycm.queryRoleForUserByUsername(user_id);
    }

    /**
     *用户分配角色
     * @param uc
     * @return
     */
    public int insert(userole_control uc){
        QueryWrapper<userole_control> qw=new QueryWrapper<>();
        if( ycm.selectList( qw.eq( "user_id" , uc.getUser_id() ) ) != null || ycm.selectList( qw.eq( "user_id" , uc.getUser_id() ) ).size() !=0){
            deleteByUser_id(uc.getUser_id());
        }
        int shu=0;
        if(uc.getRole_ids() != null || uc.getRole_ids().length != 0){
            for(int i=0,j=uc.getRole_ids().length ; i<j ;i++){
                uc.setRole_id(uc.getRole_ids()[i]);
                uc.setUserole_id(uuid.randomUUID().toString());
                ycm.insert(uc);
                shu++;
            }
        }
        return shu;
    }

    /**
     * 根据用户名删除 对应的用户角色
     * @param User_id
     * @return
     */
    public int deleteByUser_id(String User_id){
        QueryWrapper<userole_control> qw=new QueryWrapper<>();
        qw.eq("User_id",User_id);
        return ycm.delete(qw);
    }

    /**
     * 根绝角色id 删除对应的用户角色
     * @param role_id
     * @return
     */
    public int deletByRole_id(String role_id){
        QueryWrapper<userole_control> qw=new QueryWrapper<>();
        qw.eq("role_id",role_id);
        return ycm.delete(qw);
    }

    /**
     * 根据主键删除  意义？
     * @param userole_id
     * @return
     */
    public int delete(String userole_id){
        if(ycm.selectById(userole_id)==null){
            return -1;
        }
        return ycm.deleteById(userole_id);
    }

    /**
     * 根据用户名  多条删除 用户的角色
     * @param user_ids
     */
    public int deletesByUser_id(List<String> user_ids) {
        if(user_ids==null || user_ids.size()==0){
            return 0;
        }
        int shu=0;
        QueryWrapper<userole_control> qw=new QueryWrapper<>();
        for(int i=0;i<user_ids.size();i++){
            qw.eq("user_id",user_ids.get(i));
            if(this.ycm.delete(qw)==1){
                shu++;
            }
        }
        return shu;
    }

    /**
     * 根据角色id  多条删除 用户的角色
     * @param role_ids
     */
    public int deletesByRole_ids(List<String> role_ids) {
        if(role_ids==null || role_ids.size()==0){
            return 0;
        }
        int shu=0;
        QueryWrapper<userole_control> qw=new QueryWrapper<>();
        for(int i=0;i<role_ids.size();i++){
            qw.eq("role_id",role_ids.get(i));
            if(ycm.delete(qw)==1){
                shu++;
            }
        }
        return shu;
    }
}
